/*
 * Copyright (c) 2018-2025 Tencent. All Rights Reserved.
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing,
 * software distributed under the License is distributed on an
 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
 * KIND, either express or implied.  See the License for the
 * specific language governing permissions and limitations
 * under the License.
 */

namespace TencentCloud.Trtc.V20190722.Models
{
    using Newtonsoft.Json;
    using System.Collections.Generic;
    using TencentCloud.Common;

    public class McuRecordParams : AbstractModel
    {
        
        /// <summary>
        /// 转推录制模式， 
        /// 0/不填: 暂不支持，行为未定义；
        /// 1: 不开启录制；
        /// 2: 开启录制（使用控制台自动录制模板参数，参考：[跳转文档](https://cloud.tencent.com/document/product/647/111748#.E5.BD.95.E5.88.B6.E6.8E.A7.E5.88.B6.E6.96.B9.E6.A1.88)）；
        /// 3: 开启录制（使用API指定参数）。
        /// </summary>
        [JsonProperty("UniRecord")]
        public ulong? UniRecord{ get; set; }

        /// <summary>
        /// 录制任务 key，标识一个录制任务；您可以通过该参数，将多个转推任务录制成一个文件。不指定该参数时，只录制当前转推任务。
        /// 【限制长度为128字节，只允许包含大小写英文字母（a-zA-Z）、数字（0-9）及下划线(_)和连词符(-)】
        /// </summary>
        [JsonProperty("RecordKey")]
        public string RecordKey{ get; set; }

        /// <summary>
        /// 【仅当UniRecord=3时此参数有效】
        /// 续录等待时间，对应录制模板“续录等待时长”，单位：秒。该值需大于等于 5，且小于等于 86400(24小时)，默认值为 30。启用续录时，录制任务空闲超过RecordWaitTime的时长，自动结束。
        /// </summary>
        [JsonProperty("RecordWaitTime")]
        public ulong? RecordWaitTime{ get; set; }

        /// <summary>
        /// 【仅当UniRecord=3时此参数有效】
        /// 录制输出文件格式列表，对应录制模板“文件格式”，支持“hls”、"mp4"、"aac"三种格式，默认值为"mp4"。其中"mp4"和"aac"格式，不能同时指定。
        /// 只录制 mp4格式，示例值：["mp4"]。同时录制mp4 和 HLS 格式，示例值：["mp4","hls"]。
        /// </summary>
        [JsonProperty("RecordFormat")]
        public string[] RecordFormat{ get; set; }

        /// <summary>
        /// 【仅当UniRecord=3时此参数有效】
        /// 单个文件录制时长，对应录制模板“单个录制文件时长”，单位：分钟。该值需大于等于 1，且小于等于 1440(24小时)，默认值为 1440。只对"mp4"或"aac"格式生效。实际单文件录制时长还受单文件大小不超过 2G 限制，超过2G则强制拆分。
        /// </summary>
        [JsonProperty("MaxMediaFileDuration")]
        public ulong? MaxMediaFileDuration{ get; set; }

        /// <summary>
        /// 【仅当UniRecord=3时此参数有效】
        /// 录制的音视频类型，对应录制模板“录制格式”，0:音视频，1：纯音频，2：纯视频。最终录制文件内容是录制指定类型和转推内容的交集。
        /// </summary>
        [JsonProperty("StreamType")]
        public ulong? StreamType{ get; set; }

        /// <summary>
        /// 录制文件名前缀，不超过64字符。只有存储为vod时生效。
        /// 【限制长度为64字节，只允许包含大小写英文字母（a-zA-Z）、数字（0-9）及下划线(_)和连词符(-)】
        /// </summary>
        [JsonProperty("UserDefineRecordPrefix")]
        public string UserDefineRecordPrefix{ get; set; }

        /// <summary>
        /// 【仅当UniRecord=3时此参数有效】
        /// 录制文件存储参数，对应控制台“存储位置”及相关参数。目前支持云点播VOD和对象存储COS两种存储方式，只能填写一种。
        /// </summary>
        [JsonProperty("McuStorageParams")]
        public McuStorageParams McuStorageParams{ get; set; }


        /// <summary>
        /// For internal usage only. DO NOT USE IT.
        /// </summary>
        public override void ToMap(Dictionary<string, string> map, string prefix)
        {
            this.SetParamSimple(map, prefix + "UniRecord", this.UniRecord);
            this.SetParamSimple(map, prefix + "RecordKey", this.RecordKey);
            this.SetParamSimple(map, prefix + "RecordWaitTime", this.RecordWaitTime);
            this.SetParamArraySimple(map, prefix + "RecordFormat.", this.RecordFormat);
            this.SetParamSimple(map, prefix + "MaxMediaFileDuration", this.MaxMediaFileDuration);
            this.SetParamSimple(map, prefix + "StreamType", this.StreamType);
            this.SetParamSimple(map, prefix + "UserDefineRecordPrefix", this.UserDefineRecordPrefix);
            this.SetParamObj(map, prefix + "McuStorageParams.", this.McuStorageParams);
        }
    }
}

